Error in code of basic game using multiple sprites and surfaceView [on hold]

Posted by Khagendra Nath Mahato on Game Development See other posts from Game Development or by Khagendra Nath Mahato
Published on 2014-08-22T17:33:28Z Indexed on 2014/08/22 22:35 UTC
Read the original article Hit count: 488

I am a beginner to android and i was trying to make a basic game with the help of an online video tutorial. I am having problem with the multi-sprites and how to use with surfaceview.The application fails launching. Here is the code of the game.please help me.

package com.example.killthemall;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;

public class Game extends Activity {

    KhogenView View1;

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();

        while(true){
        try {
            OurThread.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }}

    }
    Thread OurThread;
    int herorows = 4;
    int herocolumns = 3;
    int xpos, ypos;
    int xspeed;
    int yspeed;
    int herowidth;
    int widthnumber = 0;
    int heroheight;
    Rect src;
    Rect dst;
    int round;
    Bitmap bmp1;
    // private Bitmap bmp1;//change name
    public List<Sprite> sprites = new ArrayList<Sprite>() {
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        View1 = new KhogenView(this);
        setContentView(View1);




        sprites.add(createSprite(R.drawable.image));
        sprites.add(createSprite(R.drawable.bad1));

        sprites.add(createSprite(R.drawable.bad2));
        sprites.add(createSprite(R.drawable.bad3));
        sprites.add(createSprite(R.drawable.bad4));
        sprites.add(createSprite(R.drawable.bad5));
        sprites.add(createSprite(R.drawable.bad6));
        sprites.add(createSprite(R.drawable.good1));
        sprites.add(createSprite(R.drawable.good2));
        sprites.add(createSprite(R.drawable.good3));
        sprites.add(createSprite(R.drawable.good4));
        sprites.add(createSprite(R.drawable.good5));
        sprites.add(createSprite(R.drawable.good6));



    }

    private Sprite createSprite(int image) {
        // TODO Auto-generated method stub
        bmp1 = BitmapFactory.decodeResource(getResources(), image);
        return new Sprite(this, bmp1);
    }

    public class KhogenView extends SurfaceView implements Runnable {

        SurfaceHolder OurHolder;
        Canvas canvas = null;

        Random rnd = new Random();
        {
            xpos = rnd.nextInt(canvas.getWidth() - herowidth)+herowidth;
            ypos = rnd.nextInt(canvas.getHeight() - heroheight)+heroheight;
            xspeed = rnd.nextInt(10 - 5) + 5;
            yspeed = rnd.nextInt(10 - 5) + 5;
        }

        public KhogenView(Context context) {
            super(context);
            // TODO Auto-generated constructor stub
            OurHolder = getHolder();

            OurThread = new Thread(this);
            OurThread.start();

        }

        @Override
        public void run() {
            // TODO Auto-generated method stub


            herowidth = bmp1.getWidth() / 3;
            heroheight = bmp1.getHeight() / 4;

            boolean isRunning = true;
            while (isRunning) {
                if (!OurHolder.getSurface().isValid())
                    continue;

                canvas = OurHolder.lockCanvas();
                canvas.drawRGB(02, 02, 50);

                for (Sprite sprite : sprites) {

                    if (widthnumber == 3)
                        widthnumber = 0;
                    update();
                    getdirection();
                    src = new Rect(widthnumber * herowidth, round * heroheight,
                            (widthnumber + 1) * herowidth, (round + 1)* heroheight);

                    dst = new Rect(xpos, ypos, xpos + herowidth, ypos+ heroheight);


                    canvas.drawBitmap(bmp1, src, dst, null);

                }

                widthnumber++;
                OurHolder.unlockCanvasAndPost(canvas);

            }
        }

        public void update() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            if (xpos + xspeed <= 0)
                xspeed = 40;
            if (xpos >= canvas.getWidth() - herowidth)
                xspeed = -50;
            if (ypos + yspeed <= 0)
                yspeed = 45;
            if (ypos >= canvas.getHeight() - heroheight)
                yspeed = -55;

            xpos = xpos + xspeed;
            ypos = ypos + yspeed;

        }

        public void getdirection() {

            double angleinteger = (Math.atan2(yspeed, xspeed)) / (Math.PI / 2);
            round = (int) (Math.round(angleinteger) + 2) % herorows;
            // Toast.makeText(this, String.valueOf(round),
            // Toast.LENGTH_LONG).show();
        }

    }

    public class Sprite {

        Game game;
        private Bitmap bmp;

        public Sprite(Game game, Bitmap bmp) {
            // TODO Auto-generated constructor stub
            this.game = game;
            this.bmp = bmp;


        }

    }

}

Here is the LogCat if it helps....

08-22 23:18:06.980: D/AndroidRuntime(28151): Shutting down VM
08-22 23:18:06.980: W/dalvikvm(28151): threadid=1: thread exiting with uncaught exception (group=0xb3f6f4f0)
08-22 23:18:06.980: D/AndroidRuntime(28151): procName from cmdline: com.example.killthemall
08-22 23:18:06.980: E/AndroidRuntime(28151): in writeCrashedAppName, pkgName :com.example.killthemall
08-22 23:18:06.980: D/AndroidRuntime(28151): file written successfully with content: com.example.killthemall StringBuffer : ;com.example.killthemall
08-22 23:18:06.990: I/Process(28151): Sending signal. PID: 28151 SIG: 9
08-22 23:18:06.990: E/AndroidRuntime(28151): FATAL EXCEPTION: main
08-22 23:18:06.990: E/AndroidRuntime(28151): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.killthemall/com.example.killthemall.Game}: java.lang.NullPointerException
08-22 23:18:06.990: E/AndroidRuntime(28151):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at android.os.Looper.loop(Looper.java:130)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at android.app.ActivityThread.main(ActivityThread.java:3683)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at java.lang.reflect.Method.invokeNative(Native Method)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at java.lang.reflect.Method.invoke(Method.java:507)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:638)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at dalvik.system.NativeStart.main(Native Method)
08-22 23:18:06.990: E/AndroidRuntime(28151): Caused by: java.lang.NullPointerException
08-22 23:18:06.990: E/AndroidRuntime(28151):    at com.example.killthemall.Game$KhogenView.<init>(Game.java:96)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at com.example.killthemall.Game.onCreate(Game.java:58)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
08-22 23:18:06.990: E/AndroidRuntime(28151):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-22 23:18:06.990: E/AndroidRuntime(28151):    ... 11 more
08-22 23:18:18.050: D/AndroidRuntime(28191): Shutting down VM
08-22 23:18:18.050: W/dalvikvm(28191): threadid=1: thread exiting with uncaught exception (group=0xb3f6f4f0)
08-22 23:18:18.050: I/Process(28191): Sending signal. PID: 28191 SIG: 9
08-22 23:18:18.050: D/AndroidRuntime(28191): procName from cmdline: com.example.killthemall
08-22 23:18:18.050: E/AndroidRuntime(28191): in writeCrashedAppName, pkgName :com.example.killthemall
08-22 23:18:18.050: D/AndroidRuntime(28191): file written successfully with content: com.example.killthemall StringBuffer : ;com.example.killthemall
08-22 23:18:18.050: E/AndroidRuntime(28191): FATAL EXCEPTION: main
08-22 23:18:18.050: E/AndroidRuntime(28191): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.killthemall/com.example.killthemall.Game}: java.lang.NullPointerException
08-22 23:18:18.050: E/AndroidRuntime(28191):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at android.os.Looper.loop(Looper.java:130)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at android.app.ActivityThread.main(ActivityThread.java:3683)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at java.lang.reflect.Method.invokeNative(Native Method)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at java.lang.reflect.Method.invoke(Method.java:507)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:638)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at dalvik.system.NativeStart.main(Native Method)
08-22 23:18:18.050: E/AndroidRuntime(28191): Caused by: java.lang.NullPointerException
08-22 23:18:18.050: E/AndroidRuntime(28191):    at com.example.killthemall.Game$KhogenView.<init>(Game.java:96)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at com.example.killthemall.Game.onCreate(Game.java:58)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
08-22 23:18:18.050: E/AndroidRuntime(28191):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-22 23:18:18.050: E/AndroidRuntime(28191):    ... 11 more

© Game Development or respective owner

Related posts about android

Related posts about sprites